www.gusucode.com > VC++ RingSDK界面库 > VC++ RingSDK界面库/code/example/controls/toolbar/main.cpp
/********************************************************************** // // // ########## ###### ######### # ###### # // ############# ########### ######### ######### ### // ######## # ### ## ############# ## ## ##### # #### // #### ## ## ### ### ### # # ##### ##### // # ### # # ## ## ## ## ### // ## ###### ## ## #### #### # # ## // ######### ### ## ### ####### ###### ## ## ### // ###### ## ###### ## ## #### # ## #### // ####### ## ###### ## ### ## ## ### ###### // ######### ## ###### ## ###### ### ## ### # ##### // ## ###### ####### ### #### ## ## ####### ######## ## #### // ## #### ### # ### ### ## ########## ###### ## #### // ## ## ## ######### #### # ## // # ### // ## // ### // ## // // // RingSDK程序界面类库演示程序 toolbar //作者:临风 // //版本:1.0 // //声明:本类库可以自由使用而不须对作者作出任何回报,但作者希望能得到 // 你的鼓励和支持。你可以对类库源码作出修改和改进,但希望你能在 // 修改的同时给作者一份同样的副本。 // 本类库不得用于任何商业用途,如确实需要,请与作者联系。 // //e-mail:ringphone@sina.com // //原文件名:main.cpp // //说明: 本程序演示RingToolBar的使用: // 1、菜单栏的使用 // 2、创建原始状态(按钮)工具栏 // 3、从资源载入扁平工具栏 // 4、创建真彩+热敏效果工具栏 // 5、在工具栏上插入静态文本及控件 // **********************************************************************/ #include "global.h" #define CM_CONNECT 12001 #define CM_DISCONNECT 12002 #define IDC_HOST 201 #define IDC_PORT 202 BEGIN_REGMAINMSG REGCMD(CM_NEW,OnFileNew) REGCMD(CM_OPEN,OnFileOpen) REGCMD(CM_ABOUT,OnAbout) REGCMD(CM_EXIT,OnExit) REGCMD(CM_CASCADE,OnCascadeChild) REGCMD(CM_TILEH,OnTileChildH) REGCMD(CM_TILEV,OnTileChildV) REGCMD(CM_CLOSEALL,MaxChild) REGCMD(CM_CONNECT,OnConnect) REGCMD(CM_DISCONNECT,OnDisConnect) REGMSG(WM_CREATE) REGMSG(WM_DESTROY) END_REGMSG BEGIN_REGMSG(tooldlg) REGMSG(WM_INITDIALOG) REGMSG(WM_GETDRAGRECTS) REGMSG(WM_DOCKSTATECHANGE) END_REGMSG int RingMain() { APP_CREATEWINDOW("工具栏演示程序","RINGSDK_TOOLBAR_DEMO",WS_OVERLAPPEDWINDOW, MAKEINTRESOURCE(IDM_MAIN)); return RingApp.Run(); } RINGMAINMSG(WM_CREATE) { //设置程序图标 SetIcon(LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_MAIN))); //初始化菜单 rm = InstallXPMenu(); //设置菜单图标 rm->SubMenu(0)->SetItemIcon(CM_NEW,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_NEW))); rm->SubMenu(0)->SetItemIcon(CM_OPEN,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_OPEN))); rm->SubMenu(0)->SetItemIcon(CM_SAVE,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_SAVE))); rm->SubMenu(0)->SetItemIcon(CM_SAVEALL,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_SAVEALL))); rm->SubMenu(0)->SetItemIcon(CM_PRINT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_PRINT))); rm->SubMenu(0)->SetItemIcon(CM_EXIT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_EXIT))); rm->SubMenu(1)->SetItemIcon(CM_UNDO,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_UNDO))); rm->SubMenu(1)->SetItemIcon(CM_REDO,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_REDO))); rm->SubMenu(1)->SetItemIcon(CM_COPY,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_COPY))); rm->SubMenu(1)->SetItemIcon(CM_PASTE,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_PASTE))); rm->SubMenu(1)->SetItemIcon(CM_CUT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_CUT))); rm->SubMenu(1)->SetItemIcon(CM_DELETE,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_DEL))); rm->SubMenu(3)->SetItemIcon(CM_CLOSEWINDOW,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_CLOSE))); rm->SubMenu(3)->SetItemIcon(CM_NEXT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_NEXT))); rm->SubMenu(3)->SetItemIcon(CM_PREV,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_PREV))); rm->SubMenu(3)->SetItemIcon(CM_CASCADE,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_CASCADE))); rm->SubMenu(3)->SetItemIcon(CM_TILEH,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_TILEH))); rm->SubMenu(3)->SetItemIcon(CM_TILEV,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_TILEV))); rm->SubMenu(4)->SetItemIcon(CM_ABOUT,LoadIcon(GetInstance(),MAKEINTRESOURCE(IDI_HELP))); menubar = NewRingObj(itemof(RingMenuBar)); menubar->LoadMenu(rm); SetDockBackGround(MAKEINTRESOURCE(IDB_BKG),TRUE); toolbar = NewRingObj(toolbar); toolbar->Create(IDB_TOOL);//,TBSTYLE_FLAT); toolbar->InsertButton(1,0,CM_NEW); toolbar->InsertButton(2,1,CM_OPEN); toolbar->InsertButton(3,2,3); toolbar->InsertButton(4,3,4); toolbar->InsertSep(5); toolbar->InsertButton(7,4,5); toolbar->InsertButton(8,5,6); toolbar = NewRingObj(itemof(RingToolBar)); toolbar->Create(IDC_DEFTOOLBAR,TBSTYLE_FLAT); toolbar->LoadToolBar(IDC_DEFTOOLBAR); toolbar = NewRingObj(toolbar); toolbar->Create(IDB_COOLGRAY,TBSTYLE_FLAT); toolbar->InsertButton(1,0,1); toolbar->InsertButton(2,1,2); toolbar->InsertButton(3,2,3); toolbar->InsertButton(4,3,4); toolbar->InsertSep(5); toolbar->InsertButton(6,4,5); toolbar->InsertButton(7,5,6); toolbar->InsertSep(8); toolbar->InsertButton(9,12,7,0,TBSTYLE_BUTTON | TBSTYLE_CHECK); toolbar->InsertButton(10,13,8); toolbar->InsertSep(11); toolbar->InsertButton(12,6,9); toolbar->InsertButton(13,7,10); toolbar->InsertButton(14,8,11); toolbar->InsertButton(15,9,12); toolbar->InsertButton(16,10,13); toolbar->InsertButton(17,14,14); toolbar->InsertSep(18); toolbar->InsertButton(19,11,15); //加入热敏图象 toolbar->AddHotImage(IDB_COOL,20,20,RGB(192,192,192)); toolbar->EnableDock("真彩工具栏"); //创建控件 m_ipAddr = NewRingObj(itemof(RingIPAddr)); m_ipAddr->Create(0,0,NULL,IDC_HOST,0,0,120,20); m_edPort = NewRingObj(itemof(RingEdit)); m_edPort->Create(ES_NUMBER,WS_EX_CLIENTEDGE,NULL,IDC_PORT,0,0,40,20); toolbar = NewRingObj(toolbar); toolbar->Create(IDB_NET,TBSTYLE_FLAT); //加入文本及已创建的控件 toolbar->InsertText(0,"服务器地址:"); toolbar->InsertItem(1,m_ipAddr); toolbar->InsertText(2,"端口:"); toolbar->InsertItem(3,m_edPort); toolbar->InsertButton(4,1,CM_CONNECT); toolbar->InsertButton(5,0,CM_DISCONNECT); toolbar->InsertButton(6,2,1); toolbar->InsertButton(7,3,2); toolbar->InsertButton(8,5,3,NULL,TBSTYLE_CHECK); toolbar->EnableDock("SOCKET工具栏"); toolbar->EnableButton(CM_DISCONNECT,FALSE); return DefaultProc(param); } RINGMAINMSG(WM_DESTROY) { return Quit(); } RINGMAINMSG(WM_RINGTOOLHELP) { char s[80]; wsprintf(s,"%d\0",param.wParam); SetTitle(s); return 0; } RINGMAINCMD(OnFileNew) { child = NewRingObj(child); CreateChild("new document",child,FALSE,WS_OVERLAPPEDWINDOW); } RINGMAINCMD(OnFileOpen) { } RINGMAINCMD(OnAbout) { ShowHelpInfo("RingSDK 工具栏演示程序 v1.0\n(C)CopyRight 2005\n临风 ringphone@njwx.com","工具栏演示程序",MAKEINTRESOURCE(IDI_MAIN)); } RINGMAINCMD(OnExit) { SendExit(); } RINGMAINCMD(OnConnect) { int val = m_ipAddr->GetInt(); MsgBox("正在连接","连接到%d.%d.%d.%d:%d\n\n程序仅演示界面,并不实际连接。", FIRST_IPADDRESS(val),SECOND_IPADDRESS(val),THIRD_IPADDRESS(val), FOURTH_IPADDRESS(val),m_edPort->GetInt()); toolbar->EnableButton(CM_CONNECT,FALSE); toolbar->EnableButton(CM_DISCONNECT); } RINGMAINCMD(OnDisConnect) { toolbar->EnableButton(CM_CONNECT); toolbar->EnableButton(CM_DISCONNECT,FALSE); } INITWINDOW(tooldlg)() { SetRectEmpty(&m_vrc); SetRectEmpty(&m_hrc); } RINGMSG(tooldlg,WM_INITDIALOG) { return FALSE; } RINGMSG(tooldlg,WM_GETDRAGRECTS) { RECT rc,rcS; if(param.wParam == TBS_FLAG_HORZ) { if(IsRectEmpty(&m_hrc)) { GetWindowRect(GetDlgItem(m_hWnd,IDC_LIST1),&rc); GetWindowRect(GetDlgItem(m_hWnd,IDC_TEXT),&rcS); ScreenToClient(m_hWnd,(LPPOINT)&rcS); ScreenToClient(m_hWnd,(LPPOINT)&rcS+1); m_hrc.right = rcS.right + 20 + rc.right - rc.left; GetWindowRect(GetDlgItem(m_hWnd,IDC_ICON1),&rcS); ScreenToClient(m_hWnd,(LPPOINT)&rcS); ScreenToClient(m_hWnd,(LPPOINT)&rcS+1); m_hrc.bottom = max((rcS.bottom + rcS.top),(rc.bottom - rc.top + rcS.top * 2)); } if(param.lParam) CopyRect((LPRECT)param.lParam,&m_hrc); return 1; } else { if(IsRectEmpty(&m_vrc)) { GetWindowRect(GetDlgItem(m_hWnd,IDC_LIST1),&rc); m_vrc.right = rc.right - rc.left + 4; GetWindowRect(GetDlgItem(m_hWnd,IDC_ICON1),&rcS); ScreenToClient(m_hWnd,(LPPOINT)&rcS); ScreenToClient(m_hWnd,(LPPOINT)&rcS+1); m_vrc.bottom = rcS.bottom + rc.bottom - rc.top + rcS.top * 2; } if(param.lParam) CopyRect((LPRECT)param.lParam,&m_vrc); } return 1; } RINGMSG(tooldlg,WM_DOCKSTATECHANGE) { if(param.shortval.high == param.shortval.low) return 0; RingListBox* list = GetItem(list,IDC_LIST1); RECT rc; if(m_param.wParam > TBS_FLAG_DOCKBOTTOM || m_param.wParam == TBS_FLAG_FLY) { GetWindowRect(GetDlgItem(m_hWnd,IDC_ICON1),&rc); ScreenToClient(m_hWnd,(LPPOINT)&rc); ScreenToClient(m_hWnd,(LPPOINT)&rc+1); SetPos(0,0,m_vrc.right,m_vrc.bottom); list->SetPos(2,rc.bottom + 10,0,0,0,SWP_NOSIZE); } else { GetWindowRect(GetDlgItem(m_hWnd,IDC_TEXT),&rc); ScreenToClient(m_hWnd,(LPPOINT)&rc); ScreenToClient(m_hWnd,(LPPOINT)&rc+1); SetPos(0,0,m_hrc.right,m_hrc.bottom); list->SetPos(rc.right + 10,rc.top,0,0,0,SWP_NOSIZE); } return 1; }